{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bee6215eb78a6c5",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "source": [
    "# 数据分析\n",
    "\n",
    "## 一、基本流程\n",
    "\n",
    "- 确定目标（输入）：理解业务，确定指标口径\n",
    "- 获取数据：数据仓库、电子表格、三方接口、网络爬虫、开放数据集等\n",
    "- 清洗数据：缺失值、重复值、异常值的处理以及其他预处理（格式化、离散化、二值化等）\n",
    "- 数据透视：排序、统计、分组聚合、交叉表、透视表等\n",
    "- 数据呈现（输出）：数据可视化，发布工作成果（数据分析报告）\n",
    "- 分析洞察（后续）：解释数据的变化，提出对应的方案\n",
    "\n",
    "## 二、常用库\n",
    "\n",
    "- NumPy 矩阵计算\n",
    "- Pandas 处理数据\n",
    "- Matplotlib 数据可视化\n",
    "- SciPy 科学计算\n",
    "- Polas\n",
    "- Seaborn 可视化\n",
    "- Scikit-learn\n",
    "- Statsmodels\n",
    "- PySpark\n",
    "- Tensorflow\n",
    "- Keras\n",
    "- PyTorch\n",
    "- NLTK / SpaCy\n",
    "\n",
    "## 三、conda\n",
    "\n",
    "数据分析一般使用Jupyter来写python代码，conda提供了jupyter环境。\n",
    "\n",
    "1. 版本和帮助信息。\n",
    "\n",
    "    - 查看版本：`conda -V`或`conda --version`，区分大小写\n",
    "    - 获取帮助：`conda -h`或`conda --help`\n",
    "    - 相关信息：`conda list`\n",
    "\n",
    "2. 虚拟环境相关。\n",
    "\n",
    "    - 显示所有conda虚拟环境：`conda env list`\n",
    "    - 创建conda虚拟环境：`conda create --name venv`\n",
    "    - 指定 Python 版本创建虚拟环境：`conda create --name venv python=3.7`\n",
    "    - 指定 Python 版本创建虚拟环境并安装指定依赖项：`conda create --name venv python=3.7 numpy pandas`\n",
    "    - 通过克隆现有虚拟环境的方式创建虚拟环境：`conda create --name venv2 --clone venv`\n",
    "    - 分享虚拟环境并重定向到指定的文件中：`conda env export > environment.yml`\n",
    "    - 通过分享的虚拟环境文件创建虚拟环境：`conda env create -f environment.yml`\n",
    "    - 激活虚拟环境：`conda activate venv`\n",
    "    - 退出虚拟环境：`conda deactivate`\n",
    "    - 删除虚拟环境：`conda remove --name venv --all`\n",
    "\n",
    "    > **说明**：上面的命令中，`venv`和`venv2`是虚拟环境文件夹的名字，可以将其替换为自己喜欢的名字，但是**强烈建议**使用英文且不要有特殊字符。\n",
    "\n",
    "3. 包（三方库或工具）管理。\n",
    "\n",
    "    - 查看已经安装的包：`conda list`\n",
    "    - 搜索指定的包：`conda search matplotlib`\n",
    "    - 安装指定的包：`conda install matplotlib`\n",
    "    - 更新指定的包：`conda update matplotlib`\n",
    "    - 移除指定的包：`conda remove matplotlib`\n",
    "\n",
    "   将默认源更换为国内镜像的命令是：`conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/`和`conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main`。如果需要换回默认源，可以使用命令`conda config --remove-key channels`。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48e45bb98ec0c450",
   "metadata": {},
   "source": [
    "## 四、Jupyterlab\n",
    "\n",
    "lab比notebook功能更强大。\n",
    "\n",
    "安装：`pip install jupyterlab`\n",
    "\n",
    "启动： `jupyter lab`\n",
    "\n",
    "### notebook使用技巧\n",
    "\n",
    "- Tab补全\n",
    "- 获取帮助，通过`?`可以获取帮助，例如 `range?`运行cell之后会显示range函数的帮助手册\n",
    "- 搜索命令，通过 `*`和`?`可以搜素命令，例如 `p*?`，运行cell，搜索所有以字母p开头的命令\n",
    "- 使用系统命令，通过`!`调用系统终端的命令，例如`!dir`调用Windows cmd的`dir`命令\n",
    "- 魔法命令 `%`开头的命令。常用的魔法指令有：\n",
    "\n",
    "    | 魔法指令                                    | 功能说明                                   |\n",
    "    | ------------------------------------------- | ------------------------------------------ |\n",
    "    | `%pwd`                                      | 查看当前工作目录                           |\n",
    "    | `%ls`                                       | 列出当前或指定文件夹下的内容               |\n",
    "    | `%cat`                                      | 查看指定文件的内容                         |\n",
    "    | `%hist`                                     | 查看输入历史                               |\n",
    "    | `%matplotlib inline`                        | 设置在页面中嵌入matplotlib输出的统计图表   |\n",
    "    | `%config Inlinebackend.figure_format='svg'` | 设置统计图表使用SVG格式（矢量图）          |\n",
    "    | `%run`                                      | 运行指定的程序                             |\n",
    "    | `%load`                                     | 加载指定的文件到单元格中                   |\n",
    "    | `%quickref`                                 | 显示IPython的快速参考                      |\n",
    "    | `%timeit`                                   | 多次运行代码并统计代码执行时间             |\n",
    "    | `%prun`                                     | 用`cProfile.run`运行代码并显示分析器的输出 |\n",
    "    | `%who` / `%whos`                            | 显示命名空间中的变量                       |\n",
    "    | `%xdel`                                     | 删除一个对象并清理所有对它的引用           |\n",
    "\n",
    "- 快捷键。JupyterLab 中的很多操作可以通过快捷键来实现，使用快捷键可以提升工作效率。JupyterLab 的快捷键可以分为命令模式下的快捷键和编辑模式下的快捷键，所谓编辑模式就是处于输入代码或撰写文档状态的模式，在编辑模式下按`Esc`可以回到命令模式，在命令模式下按`Enter`可以进入编辑模式。\n",
    "\n",
    "    命令模式下的快捷键：\n",
    "\n",
    "    | 快捷键                                   | 功能说明                                     |\n",
    "    | ---------------------------------------- | -------------------------------------------- |\n",
    "    | `Alt` + `Enter`                          | 运行当前单元格并在下面插入新的单元格         |\n",
    "    | `Shift` + `Enter`                        | 运行当前单元格并选中下方的单元格             |\n",
    "    | `Ctrl` + `Enter`                         | 运行当前单元格                               |\n",
    "    | `j` / `k`、`Shift` + `j` / `Shift` + `k` | 选中下方/上方单元格、连续选中下方/上方单元格 |\n",
    "    | `a` / `b`                                | 在下方/上方插入新的单元格                    |\n",
    "    | `c` / `x`                                | 复制单元格 / 剪切单元格                      |\n",
    "    | `v` / `Shift` + `v`                      | 在下方/上方粘贴单元格                        |\n",
    "    | `dd` / `z`                               | 删除单元格 / 恢复删除的单元格                |\n",
    "    | `Shift` + `l`                            | 显示或隐藏当前/所有单元格行号                |\n",
    "    | `Space` / `Shift` + `Space`              | 向下/向上滚动页面                            |\n",
    "\n",
    "    编辑模式下的快捷键：\n",
    "\n",
    "    | 快捷键                     | 功能说明                               |\n",
    "    | -------------------------- | -------------------------------------- |\n",
    "    | `Shift` + `Tab`            | 获得提示信息                           |\n",
    "    | `Ctrl` + `]`/ `Ctrl` + `[` | 增加/减少缩进                          |\n",
    "    | `Alt` + `Enter`            | 运行当前单元格并在下面插入新的单元格   |\n",
    "    | `Shift` + `Enter`          | 运行当前单元格并选中下方的单元格       |\n",
    "    | `Ctrl` + `Enter`           | 运行当前单元格                         |\n",
    "    | `Ctrl` + `Left` / `Right`  | 光标移到行首/行尾                      |\n",
    "    | `Ctrl` + `Up` / `Down`     | 光标移动代码开头/结尾处                |\n",
    "    | `Up` / `Down`              | 光标上移/下移一行或移到上/下一个单元格 |"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
